拼接数据

4.2节使用pandas的merge函数合并了3个DataFrame,但是merge函数一次只能合并2个DataFrame,所以合并3个DataFrame需要将merge函数使用两次。本节使用pandas的concat函数进行合并,与merge函数不同的是,使用concat函数可以一次合并多个DataFrame。

【问题描述】

使用pandas的concat函数一次拼接多个DataFrame。

【示例4-6】

本例使用与示例4-4相同的数据。用concat函数水平拼接3个工作表的数据并保存到Excel文件,

  • 编写下面的代码:
code.python
import pandas as pd
# 读取三个工作表的数据
df1 = pd.read_excel('D:/Samples/ch04/02 数据合并/拼接数据/学生成绩.xlsx', sheet_name='Sheet1', index_col=0, engine='openpyxl')
df2 = pd.read_excel('D:/Samples/ch04/02 数据合并/拼接数据/学生成绩.xlsx', sheet_name='Sheet2', index_col=0, engine='openpyxl')
df3 = pd.read_excel('D:/Samples/ch04/02 数据合并/拼接数据/学生成绩.xlsx', sheet_name='Sheet3', index_col=0, engine='openpyxl')
# 使用concat函数水平拼接三个工作表的数据
result = pd.concat([df1, df2, df3], axis=1)
# 输出合并后的数据
print(result)
# 将结果保存到新的Excel文件中
result.to_excel('D:/Samples/ch04/02 数据合并/拼接数据/学生成绩_拼接.xlsx', index=True, engine='openpyxl')

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,实现数据的合并,在IDLE Shell窗口输出合并后的结果。

code.python
>>> == RESTART: D:/Samples/1.py =
      语文   数学   英语
姓名
王东    16   27   34
徐慧    85   54   92
王慧琴   99   73  118
章思思   95   83   62
阮锦绣   92   91   92
周洪宇   93   92  113
谢思明   98   95  117
程成    98   95  114
王洁   102  102  136
张丽君  107  104  105

可在原始数据文件的相同路径下找到新建的Excel文件。

【知识点扩展】

使用pandas的concat函数可以一次拼接多个DataFrame,该函数的参数的用法如表4-2所示。

表4-2 concat函数的参数

参 数 说 明
objs 指定进行拼接的对象集合,可以是Series, DataFrame等组成的列表等
axis 指定拼接的方向,默认值为0,垂向拼接,值为1时水平方向拼接
join 指定拼接的方法,值为outer或inner,相当于merge方法中how参数设置的外连接和内连接
join_axes 指定保留的轴,作用相当于merge方法中how参数设置的左连接和右连接
ignore_index 拼接后忽略原来的索引编号,重新编号
keys 添加一个键,指定数据来源